#' 最大化的值函数：可变劳动的例子
#'
#' @param par 分别为控制变量\code{k_{t+1}}和\code{h_t}
#' @param kt \code{k_t}
#' @param k0
#' @param vlast 上一期的值函数
#'
#' @return 本期的值函数。加负号是为了后续优化的技术需求。
#'
#'
  valfun_varlab <- function(par, kt, beta, theta_val, delta,A, k0 = seq(0.06,6,0.06), vlast = rep(0,100)){
  # 线性插值以平滑t-1期的值函数，这实际上假设了资本存量和值函数之间存在一个线性关系
  # 这是因为值函数那根曲线是由点构成的，点和点之间就用线性插值
  g <- signal::interp1(k0,vlast,par[1],'linear')
  ct <- kt^theta_val*(par[2]^(1-theta_val))-par[1]+(1-delta)*kt

  if (ct<=0){
    # 避免值函数为负
    val <- A*log(1-par[2]) + beta*g
  } else {
    val <- log(ct) + A*log(1-par[2]) + beta*g
  }
  return(val)
}
